Modern computer applications often involve gathering and processing large amounts of information (e.g., databases with hundreds of thousands of rows or more). Such data is often represented using matrices. Applications that process high volumes of matrix data are very computationally intensive. Many applications employ common data analytics tools to perform analytical operations and identifying properties of matrices such as rank, inverse, Cholesky factors, etc. in connection with providing processing results. Existing techniques for determining these matrix properties often require large amounts of hardware resources and power to support the computationally intensive operations. It would be useful to simplify these analytical operations and make them more computationally efficient in order to conserve computational resources and power.
Further, in certain real-time applications (e.g., signal processing, cryptography, etc.), there are rather stringent speed requirements. Currently, the determination of properties for large matrices is often performed by large servers due to the processing requirements. It would also be useful to simplify the processing operations to allow them to execute on devices with less powerful processors and fewer memories (e.g., on personal computers, mobile phones, etc.).
Moreover, many existing techniques for determining matrix properties employ sequential processes that are not easily made parallelizable. The implementations of the techniques often do not readily take advantage of the multiprocessor architectures of modern computing platforms. Further, many existing techniques employ non-regular processes that require irregular data movements to/from memories, and therefore is typically implemented as software code running on general purpose processors rather than fast, specialized hardware.